package com.liusaidh.mapper;

import com.liusaidh.domain.*;
import com.liusaidh.dto.UpdateFormDTO;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
public interface UserMapper {
    /**
     * 1.判断用户是否存在
     * @param email
     * @return  返回用户
     */
    @Select("select id from user where email = #{email} and exist = 0")
    Integer isExitEmail(String email);
    /**
     * 2.用户登录功能
     * @param email
     * @param password
     * @return 返回用户
     */
    @Select("SELECT * FROM user WHERE email = #{email} and password = #{password} and exist = 0")
    User getUserByEmailAndPassword(@Param("email") String email,@Param("password") String password);

    /**
     * 3.查询所有的用户
     * @return
     */
    List<User> getAllUser(@Param("condition") String condition);
    /**
     * 4.根据用户id删除用户,就是把用户的exist设置为1
     * @param id
     * @return
     */
    @Select("select * from user WHERE id = #{id}")
    User getUserById(Integer id);
    /**
     * 5.添加用户
     * @param user 用户
     * @return 返回受影响的行数
     */
    int addUser(User user);

    /**
     * 禁言用户
     * @param id  用户的id
     * @return  返回影响的行数
     */
    @Update("update user set ban = 1 where id = #{id}")
    int banUserToComment(@Param("id") Integer id);

    /**
     *7.取消禁言
     * @param id
     */
    @Update("update user set ban = 0 where id = #{id}")
    int notBanUserToComment(@Param("id")Integer id);

    /**
     * 8.用户关注别人
     * @param id1
     * @param id
     */
    @Insert("insert fans (idol_id,fans_id)values(#{id1},#{id})")
    void concernUser(@Param("id") Integer id,@Param("id1") Integer id1);

    /**
     * 9.用户取消关注别人
     * @param id1
     * @param id
     */
    @Delete("delete from fans where idol_id = #{id1} and fans_id = #{id}")
    void notConcernUser(@Param("id")Integer id,@Param("id1") Integer id1);

    /**
     * 10. @param user
     * @return
     */
    int updateUser(User user);

    /**
     * 获取全部用户的数量
     * @param condition  查询条件，可以为空
     * @return  返回所有的数量
     */
    long getTotalCount(@Param("condition") String condition);

    @Select("select * from user where username like concat('%',#{condition},'%') or label like concat('%',#{condition},'%') ")
    List<User> getUserByLike(@Param("condition") String condition);


    /**
     * 得到别人对我的评论，第一步
     * @param id 我的id
     * @return 返回一个list集合
     */
    List<Comment> getOthersCommentOfMe(@Param("id")Integer id, @Param("pageBeginIndex") Integer pageBeginIndex, @Param("pageSize") Integer pageSize);

    /**
     * 获取用户的用户名、昵称、头像
     * @param id  用户的id
     * @return  返回User对象的副本，即UserCopy
     */
    UserCopy getUserCopy(@Param("id") Integer id);

    /**
     * 获得别人对我的点赞
     * @param id 我的id
     * @return 返回list集合
     */
    List<Like> getOthersLikeOfMe(@Param("id") Integer id, @Param("pageBeginIndex") Integer pageBeginIndex, @Param("pageSize") Integer pageSize);

    /**
     * 根据评论的id ，获取我的一级评论
     * @param commentId  评论的id
     * @return 返回我的一级评论
     */
    String getMyCommentByCommentId(@Param("commentId") Integer commentId);
    

    /**
     * 删除用户
     * @param id 用户的id
     * @return 返回所受影响的行数
     */
    @Update("update user set exist = 1 where id = #{id}")
    int deleteUserById(@Param("id") Integer id);

    /**
     * 修改密码
     * @param id
     * @param encryptPwd
     */
    void updateMyPwd(@Param("id") Integer id, @Param("encryptPwd") String encryptPwd);


    /**
     * 修改用户信息
     * @param id
     * @param url
     * @param userDTO
     */
    void updateUserInfo(@Param("id") Integer id, @Param("url") String url, @Param("userDTO") UpdateFormDTO userDTO);


    User getUserInfoByName(@Param("email") String email);
}
